正在进行leetcode练习,您可以在此处查看:https://leetcode.com/problems/unique-morse-code-words/
我在找到正确答案时遇到了麻烦,但是在发现问题上却遇到了更多麻烦。我正在尝试使用cout打印正在使用的向量,以查看出了什么问题,但是由于某种原因,它似乎可以输出空字符串。
这是我的代码...
#include <array>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
class Solution {
public:
int uniqueMorseRepresentations(vector<string>& words) {
int num_of_uniq_words = 0;
string arr[] = {"a","b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
"l", "m","n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
string maps[] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..",
"--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
vector<string> all_words_morse;
for (int i = 0; i < words.size(); i++) {
string morse;
for (int j = 0; j < words[i].length(); j++){
for(int q = 0; q < sizeof(arr)/sizeof(arr[0]); q++) {
if (arr[q] == to_string(words[i].at(j)))
morse.append(maps[q]);
}
}
//cout << morse << endl;
all_words_morse.push_back(morse);
}
vector<string> uniq_words;
for(int i = 0; i < all_words_morse.size(); i++) {
if (find(uniq_words.begin(), uniq_words.end(), all_words_morse[i]) == uniq_words.end()) //not present
uniq_words.push_back(all_words_morse[i]);
}
//printing
for (int i = 0; i < all_words_morse.size(); i++)
cout << all_words_morse[i] << " ";
cout << "\n" << endl;
for (int i = 0; i < uniq_words.size(); i++)
cout << uniq_words[i] << " ";
cout << "\n" << endl;
num_of_uniq_words = uniq_words.size();
return num_of_uniq_words;
}
};
并使用[“ gin”,“ zen”,“ gig”,“ msg”]的测试用例输入,sdtout为... “
”
这是大约4行空字符串,我不明白为什么。
有人有任何建议或知道我在做什么错吗?
谢谢
答案 0 :(得分:0)
问题
函数std::to_string
不使用char
作为参数,因此它隐式将其转换为int,该int返回数字的字符串。例如:to_string('a') -> to_string(97) -> "97"
。
修复
使用char
或将std::string(1,words[i].at(j))
的{{3}}方法正确地将std::string
转换为字符串。
替代方法
如汤玛斯·马修斯(Thomas Matthews)在评论中所建议,请使用std::map<char, std::string>
并创建一个映射,以避免必须管理两个列表(转换),而可以使用在O(logn)
中执行查找的结构来节省时间的O(n)
。
答案 1 :(得分:0)
问题是使用to_string
函数。它不执行您认为的操作:
std :: to_string
将数值转换为std :: string。
您将一个char传递给它,因此它将char解释为一个数字值,即它的ASCII值。而对于“ g”,您将得到“ 103”。
为什么arr
是一个字符串数组而不是字符数组(如果它仅包含字符)?如果它是一个字符数组,那么您一开始就不需要to_string函数。
P.S。要在代码中发现问题,最好的办法是对其进行调试。调试器是每个程序员都应使用的工具。所以请检查一下。