Google Interview Question
Developer Program EngineersCountry: China
Interview Type: Phone Interview
Use a lookup table for the 32 special ASCII characters and then simply search and replace.
public class OctalEscape {
public static void main(String args[]) {
System.out.println(escape("\000sdjfj k\004ljf lafj \100\040\100 asdfj akl\010jsdfklf"));
}
static String lookup[];
static {
buildLookupTable();
}
static void buildLookupTable() {
lookup = new String['0'];
char octal[] = new char[] {'0','0','0'};
int c = 0;
for (char i = '0'; i <= '7'; ++i) {
octal[0] = i;
for (char j = '0'; j <= '7'; ++j) {
octal[1] = j;
for (char k = '0'; k <= '7'; ++k) {
octal[2] = k;
lookup[c++] = "\\" + octal[0] + octal[1] + octal[2];
if (c == ' ') {
return;
}
}
}
}
}
static String escape(String s) {
StringBuffer result = new StringBuffer();
char sArray[] = s.toCharArray();
for (char c : sArray) {
if (c < ' ') {
result.append(lookup[c]);
}
else {
result.append(c);
}
}
return result.toString();
}
}
Hopefully this formats correctly...
public class OctalEscape {
public static void main(String args[]) {
System.out.println(escape("\000sdjfj k\004ljf lafj \100\040\100 asdfj akl\010jsdfklf"));
}
static String lookup[];
static {
buildLookupTable();
}
static void buildLookupTable() {
lookup = new String['0'];
char octal[] = new char[] {'0','0','0'};
int c = 0;
for (char i = '0'; i <= '7'; ++i) {
octal[0] = i;
for (char j = '0'; j <= '7'; ++j) {
octal[1] = j;
for (char k = '0'; k <= '7'; ++k) {
octal[2] = k;
lookup[c++] = "\\" + octal[0] + octal[1] + octal[2];
if (c == ' ') {
return;
}
}
}
}
}
static String escape(String s) {
StringBuffer result = new StringBuffer();
char sArray[] = s.toCharArray();
for (char c : sArray) {
if (c < ' ') {
result.append(lookup[c]);
}
else {
result.append(c);
}
}
return result.toString();
}
}
@aasshishh what's your point?? It's really my google interview question. I did't need to cheat.
output : A\011B
- tmc March 12, 2013